package fr.musique.servlet;

import java.util.Enumeration;
import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import fr.musique.bean.Artiste;
import fr.musique.bean.Compositeur;
import fr.musique.bean.Musique;
import fr.musique.bean.Musique.Style;
import fr.musique.service.AlbumService;
import fr.musique.service.MusiqueService;

@Controller
public class MusiqueServlet extends MultiActionController {

	@Autowired
	protected MusiqueService musique;

	@Autowired
	protected AlbumService album;

	// Paramétrage et envoie du formulaire CreerMusique.jsp
	@RequestMapping("/Musique/creerMusique.htm")
	public ModelAndView creerMusique(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		// Récupération des champs de l'enum Style
		// et mise en tableau
		Style[] enumerationStyle = Style.values();
		String[] tabStyle = new String[Style.values().length];

		int i = 0;

		for (Style style : enumerationStyle) {
			tabStyle[i] = style.toString();
			i++;
		}

		request.setAttribute("enumStyle", tabStyle);

		// Récupération de toutes les musiques de la base de données
		LinkedList<Musique> musiques = new LinkedList<Musique>();
		for (Musique mus : musique.getAll()) {
			musiques.add(mus);
		}

		request.setAttribute("musiques", musiques);

		// Redirection
		request.setAttribute("page", "CreerMusique");

		return new ModelAndView("Accueil");
	}

	// Récupère le bean musique rempli et envoie le formulaire artiste
	@RequestMapping("/Musique/formArtiste.htm")
	public ModelAndView formArtiste(HttpServletRequest request,
			HttpServletResponse response, Musique musique) throws Exception {

		HttpSession session = request.getSession(false);

		if (session != null) {
			session.setAttribute("musique", musique);
			request.setAttribute("page", "artiste");
		} else {
			request.setAttribute("page", "CreerMusique");
		}

		return new ModelAndView("Accueil");
	}

	// Récupère le bean Artiste rempli et envoie le formulaire compositeur
	@RequestMapping("/Musique/formCompositeur.htm")
	public ModelAndView formCompositeur(HttpServletRequest request,
			HttpServletResponse response, Artiste artiste) throws Exception {

		HttpSession session = request.getSession(false);

		if (session != null) {
			session.setAttribute("artiste", artiste);
			request.setAttribute("page", "compositeur");
		} else {
			request.setAttribute("page", "CreerMusique");
		}

		return new ModelAndView("Accueil");
	}

	@RequestMapping("/Musique/new.htm")
	public ModelAndView add(HttpServletRequest request,
			HttpServletResponse response, Compositeur compositeur)
			throws Exception {

		// Récupération de la session
		HttpSession session = request.getSession(false);

		if (session == null) {
			// Redirection
			request.setAttribute("page", "CreerMusique");
		} else {

			// Récupération des deux objets précédemment mis en session
			Musique musique = (Musique) session.getAttribute("musique");
			Artiste artiste = (Artiste) session.getAttribute("artiste");

			Enumeration<String> enums = session.getAttributeNames();
			while (enums.hasMoreElements()) {
				System.out.println("Session : " + enums.nextElement());
			}

			Enumeration<String> enums1 = request.getAttributeNames();
			while (enums1.hasMoreElements()) {
				System.out.println("Request : " + enums1.nextElement());
			}
			// On vérifie que les champs existent
			if (musique != null && artiste != null && compositeur != null) {
				if (musique.getTitre() != null && artiste.getNom() != null
						&& compositeur.getNom() != null) {

					// On vérifie que les champs sont non vides
					if (!musique.getTitre().isEmpty()
							&& !musique.getDuree().isEmpty()
							&& !musique.getMaisonEdition().isEmpty()
							&& !musique.getRythme().isEmpty()
							&& !artiste.getNom().isEmpty()
							&& !compositeur.getNom().isEmpty()) {

						// Paramétrage du bean musique
						musique.setArtiste(artiste);
						musique.setCompositeur(compositeur);

						// Sauvegarde en base
						this.musique.save(musique);

						// Suppression des attributs de session
						session.removeAttribute("musique");
						session.removeAttribute("artiste");

						// Redirection - Traitement OK
						request.setAttribute("page", "CreerMusique");
						System.out.println("Musique ajoutée");
					} else {
						// Redirection - Traitement Fail
						request.setAttribute("page", "CreerMusique");
						request.setAttribute("error_musique",
								"Vous n'avez pas rempli tous les champs");
					}
				} else {
					// Redirection - Traitement Fail
					request.setAttribute("page", "CreerMusique");
					request.setAttribute("error_musique",
							"Vous n'avez pas rempli tous les champs");
				}
			}
		}
		return new ModelAndView("Accueil");
	}
}
